package com.df.excel_export.common;

import com.df.excel_export.utils.ExcelTools;
import com.df.excel_export.validator.IFieldValidator;
import lombok.Data;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Data
public class ExcelTable {

    //表所在的excel文件绝对路径
    private String excelFilePath;
    //表所在sheet完整名称
    private String sheetName;
    //excel文件上次修改时间
    private long lastModified;

    //正式数据开始的行号
    private int dataStartRowNum;
    //表名，去掉前缀和后缀
    private String tableName;
    //表中文名
    private String tableName_CN;
    //表类型，默认是横表
    private String tableType = Constant.TableType.Horizontal;
    //分表，默认0，不是分表，大于1则表示分表，1，2，3分表示分表序号，rule只使用需要为1的分表
    private int spliteTableNum = 0;

    List<String> row1AllParams = new ArrayList<>();

    //TODO 存储字段和列索引映射？
    //所有字段(列名)名
    private List<String> fieldNames = new ArrayList<String>();
    //所有字段(列)类型
    private List<String> fieldTypes = new ArrayList<>();
    //所有字段(列)分组
    private List<List<String>> fieldGroups = new ArrayList<>();
    //所有字段(列)的规则
    private List<List<String>> fieldRulesStr = new ArrayList<>();
    private List<List<IFieldValidator>> fieldValidators = new ArrayList<>();

    //所有字段(列)的中文解释
    private List<String> fieldDesc = new ArrayList<>();

    //表的数据，按行存
    private List<List<Object>> datas = new ArrayList<>();
    //此表主键id的集合，横表才有
    private Set<Object> ids = new HashSet<>();

    //依赖其他表或枚举，这里存储表明或枚举名，枚举名前加@符号
    private List<String> depends = new ArrayList<>();

    public boolean addRowData(List<Object> row){
        if(row.isEmpty()){
            return true;
        }
//        if(tableType==Constant.TableType.Horizontal){//横表
//
//        }
        Object key = row.get(0);
        if(key==null || ids.contains(key)){
            ExportTask.nowTask.setCanContinue(false);
            ExportTask.logger.error("主键id为null或者重复，excel文件："+excelFilePath+"  表名："+tableName+"  主键id："+key);
            return false;
        }
        ids.add(key);
        return true;
    }

}
